We have chosen to adopt the client-server architecture. The three major components of a client-server architecture are the client and server, and the protocol by which they communicate. These three components are described through their own chapters, which describe the design and implementation of each.